package com.xdclass.mysql.config;

import com.xdclass.mysql.interceptor.QueryInterceptor1;
import com.xdclass.mysql.interceptor.QueryInterceptor2;
import org.apache.ibatis.session.SqlSessionFactory;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;

/**
 * 1、mybatis自定义拦截器载入顺序在分页拦截器PageInterceptor前面时，自定义拦截器会失效。
 * 2、分页拦截器PageInterceptor是由pagehelper依赖包中的spring.factories文件加载进来的。
 * 3、Spring Boot的自动配置均是通过spring.factories来指定的，
 * 它的优先顺序最低（执行时机是最晚的）；通过扫描进来的(@Configuration)一般都是你自己自定义的配置类，
 * 所以优先顺序是最高的，肯定在自动配置之前载入。
 * 4、由2，3得：在自定义拦截器上加@Configuration会导致自定义拦截器先于分页拦截器加载，由于1得，
 * 此时自定义拦截器会失效。
 * 5、@AutoConfigureAfter与@AutoConfigureBefore只能使用在由spring.factories文件加载进来的自动配置类上，
 * 也就是说可以使用这两个注解来控制自动配置类的加载顺序。
 * 6、本地的spring.factories文件的加载顺序在依赖包中的spring.factories文件之后，且同一个spring.factories
 * 中，配置类的加载顺序按照正常类名升序加载。
 */





//@Configuration
//@AutoConfigureAfter(PageHelperAutoConfiguration.class)
public class MybatisConfig {

    @Resource
    private List<SqlSessionFactory> sqlSessionFactories;

    @PostConstruct
    public void addInterceptor(){
        QueryInterceptor1 queryInterceptor1 = new QueryInterceptor1();
        sqlSessionFactories.forEach(obj ->
                obj.getConfiguration().addInterceptor(queryInterceptor1));
    }
}
